草庐IT

C++ operator+ 和 operator+= 重载

全部标签

构造函数重载中的 C++ 作用域和歧义

我在3种不同的编译器(G++、clang++、CL.exe)中尝试了以下代码片段,它们都向我报告说它们无法消除重载构造函数的歧义。现在,我知道如何修改对构造函数的调用以使其选择一个或另一个(明确表示第二个参数是无符号文字值或显式转换它)。但是,我很好奇为什么编译器会首先尝试在构造函数之间进行选择,因为其中一个构造函数是私有(private)的,并且对构造函数的调用发生在应该在类范围之外的主函数中.谁能教教我?classTest{private:Test(unsignedinta,unsignedint*b){}public:Test(unsignedinta,unsignedintb)

c++ - 重载 == 运算符以使用字符串比较来比较两个 char[]

是否可以重载==运算符以便使用字符串比较来比较两个char[]? 最佳答案 没有;运算符重载的至少一个参数必须是类或枚举类型。char[]和char*是数组和指针类型,不是类或枚举类型。 关于c++-重载==运算符以使用字符串比较来比较两个char[],我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2985532/

c++ - 我经常在运算符重载定义中看到什么引用?

比如在OGRE3D引擎中,经常看到类似的东西class_nameclass_name::operator+(class_name&object)代替class_nameclass_name::operator+(class_nameobject)嗯,这并不是说我更喜欢第二种形式,而是在输入中使用引用有什么特殊原因吗?它是否有需要使用引用而不是按值复制的特殊情况?还是性能问题? 最佳答案 这是一个性能问题。通过引用传递通常比通过值传递更便宜(它基本上等同于通过指针传递)。在一个不相关的注释中,您可能希望operator+的参数是con

templates - 使用多个模板的运算符重载

templateclassA{private:Tm_var;public:operatorT()const{returnm_var;}........}templateconstAoperator+(constU&r_var1,constV&r_var2){returnA((T)r_var1+(T)r_var2);}想法是为以下情况重载+运算符一次(而不是三次):number+A,A+number,A+A(其中number是类型T,与m_var相同)。一个有趣的情况是,如果m_var是例如int和r_var是long。任何帮助将不胜感激。谢谢。 最佳答案

C++ 重载 << 错误

我希望得到一些帮助来解决我遇到的错误-我已经搜索过类似的问题,但这些问题并没有真正给我我想要的东西。下面列出了代码片段:classNewSelectionDlg:publicCDialog{//Constructionpublic:classCProductListBox{public:friendostream&operator我有一个包含多个字符串的列表框-这些字符串可能因所选的其他下拉框而异。我想将此框中的内容添加到文件中,以及用户从填充它的下拉列表中选择的内容。但是我收到以下错误(我在VS2008中开发)。errorC2804:binary'operatorhastoomany

c++ - 重载运算符<<

我正在制作一个使用operator的简单类.它将存储两个并行数据数组,每个数组具有不同(但已知)的数据类型。这个想法是最终界面看起来像这样:MyInstance这将使数组看起来像这样:StringArray:|"Firsttext"|"Secondtext"|"Thirdtext"|IntArray:|1|2|3|我可以处理检查输入以确保一切匹配的逻辑,但我对operator的技术细节感到困惑。.我查过的教程说用std::ostream&重载它作为友元函数返回类型,但我的类(class)与流无关。我尝试使用void作为返回类型,但出现编译错误。最终我返回了对该类的引用,但我不确定为什么

c++ - 从未调用过的重载函数模板

我喜欢模板,至少如果我能理解它们我会喜欢;-)。我使用模板实现了一个重载运算符。我现在正在尝试专门化函数调用。这是我的做法:classTerminallog{public:Terminallog();Terminallog(int);virtual~Terminallog();templateTerminallog&operatorTerminallog&operator&v);templateTerminallog&operator*v);templateTerminallog&operatorTerminallog&Terminallog::operatorlineendet==t

c++ - 如果我有运算符 T *(),是否需要重载 delete?

如果我有一个包含指针的模板类A,并且A有一个将返回该指针的隐式转换运算符,我是否需要,或者我应该,为A定义一个delete运算符,如果我打算将delete应用于此类的对象? 最佳答案 如果定义operatornew,则只需定义operatordelete——在这种情况下,您几乎必须这样做。这并不意味着某些东西不需要删除您的A*——但您不需要为此定义任何运算符,它会默认工作。 关于c++-如果我有运算符T*(),是否需要重载delete?,我们在StackOverflow上找到一个类似的问

C++ 为两个 double 重载 operator%

是否可以为两个double重载operator%?constdoubleoperator%(constdouble&lhs,constdouble&rhs){returnfmod(lhs,rhs);}当然,这会产生错误,因为两个参数之一必须具有类类型。所以我考虑利用C++隐式构造函数调用的可能性来解决这个问题。我是通过以下方式做到的:classMyDouble{public:MyDouble(doubleval):val_(val){}~MyDouble(){}doubleval()const{returnval_;}private:doubleval_;};constdoubleop

c++ - 使用声明和 const 重载

假设我在一个基类中有两个版本的operator->(在const上重载)。如果我说usingBase::operator->;在派生类中,我可以访问两个版本还是只能访问非常量版本? 最佳答案 与姓名隐藏相同的业务。全有或全无。使用声明(7.3.3)带来一个名称,而不是一个成员。ISO/IEC14882(2003),7.3.3.1/Ausing-declarationintroducesanameintothedeclarativeregioninwhichtheusing-declarationappears.Thatnameisa